package org.lanqiao.oa.utils;

import org.springframework.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

public class BeanCopierUtil {

    //装beanCopier的一个缓存
    private static Map<String, BeanCopier> beanCopierMap = new HashMap<>();

    /**
     * 复制的方法
     * @param o1
     * @param o2
     */
    public static void copy(Object o1,Object o2){

        String beanCopierName = o1.getClass().toString()+o2.getClass().toString();
        BeanCopier copier = null;

        //使用双重检测锁检测缓存里面是否有此beanCopier
        if(!beanCopierMap.containsKey(beanCopierName)){
            synchronized (BeanCopierUtil.class){
                if(!beanCopierMap.containsKey(beanCopierName)){
                    copier  = BeanCopier.create(o1.getClass(), o2.getClass(), false);
                    beanCopierMap.put(beanCopierName,copier);
                }else {
                    copier = beanCopierMap.get(beanCopierName);
                }
            }
        }else {
            copier = beanCopierMap.get(beanCopierName);
        }
        //嗲用copy方法进行拷贝数据
        copier.copy(o1,o2,null);
    }

}
